/**
 * 存储管理对象
 * 目标：将现有系统的所有需要存储的数据，统一管理
 *
 * @author terrfly
 * @site https://www.jeequan.com
 * @date 2022/04/13 07:18
 */

import appConfig from "@/config/appConfig.js"

// 应用级（vue级别）缓存，  当存在时则读取此值， 否则读取storage中的值。（ vue线程内的缓存，不必要每次读取应用数据，影响性能）
const appCache = {
  tokenVal: null, // token取值
  currentUser: null, // 当前商户信息
}

const model = {
  
	 
  // 退出清空所有的缓存数据。   （不包含  环境相关）
  cleanByLogout: () => {
	  
	  // 1. 清空app级别缓存。 
	  Object.keys(appCache).forEach(k => appCache[k] = null)
	  
	  let envName = model.env() // 获取到当前的环境变量 
	  uni.clearStorageSync() // 清除所有的缓存信息 
	  model.env(envName) // 重置env 
	  
	
  },
	
  // 获取和放置token
  token: (val, isDelete = false) => {
    if (isDelete) {
      appCache.tokenVal = ""
      return uni.removeStorageSync(appConfig.tokenKey)
    }

    if (val) {
      // 有值，为放置
      appCache.tokenVal = val
      uni.setStorageSync(appConfig.tokenKey, val)
    } else {
      // 否则为获取

      if (!appCache.tokenVal) {
        //缓存取不到，获取应用本地信息
        appCache.tokenVal = uni.getStorageSync(appConfig.tokenKey)
      }
      return appCache.tokenVal
    }
  },
  
  // 已经登录的用户记录
  loggedInUser: (addUserName = null, removeUserName = null) => {
    let key = "loggedInUserList"

    // 删除
    if (removeUserName) {
      let nameList = uni.getStorageSync(key) || []
      if (nameList.length <= 0) {
        //不存在数据
        return false
      }

      let hasUserIndex = nameList.indexOf(removeUserName)
      if (hasUserIndex >= 0) {
        nameList.splice(hasUserIndex, 1) //删除
        uni.setStorageSync(key, nameList)
      }

      return false
    }

    // 有新插入的记录
    if (addUserName) {
      let nameList = uni.getStorageSync(key) || []

      let hasUser = false
      for (let i = 0; i < nameList.length; i++) {
        if (nameList[i] == addUserName) {
          hasUser = true
        }
      }

      // 包含记录
      if (hasUser) {
        return false
      }

      // 最多存储 5 个
      if (nameList.length >= 5) {
        nameList.splice(0, 1) //删除第一个
      }
      nameList.push(addUserName)
      uni.setStorageSync(key, nameList)

      //获取
    } else {
      return uni.getStorageSync(key) || [] //默认空数组
    }
  },

  // 用户信息
  userInfo: (currentUserInfo) => {
    if (currentUserInfo) {
      // 仅保存基础数据
      let saveUser = {
		  
		sysUserId: currentUserInfo.sysUserId,  // 用户ID 
		realname: currentUserInfo.realname, //  用户姓名
		avatarUrl: currentUserInfo.avatarUrl, //  头像
		telphone: currentUserInfo.telphone, //  手机号
		userType: currentUserInfo.userType, //  用户类型
		
		mchNo: currentUserInfo.sysUserId,  // 商户No 
		mchShortName: currentUserInfo.shortName, // 商户简称
        mchType: currentUserInfo.mchType, // 商户类型 
		mchLevel: currentUserInfo.mchLevel, // 商户级别
		isHasMemberEnt:currentUserInfo.isHasMemberEnt,// 是否购买会员模块
		entIdList: currentUserInfo.entIdList, // 权限集合List
		
      }
      uni.setStorageSync("currentUserInfo", saveUser) // 改变存储
	  appCache.currentUser = null
    }
	
	if(!appCache.currentUser){ // 获取缓存数据 
		appCache.currentUser = uni.getStorageSync("currentUserInfo")
	}
	
	return appCache.currentUser
  },
  
  // 项目环境变量：（测试、 生产的切换）
  env: (envMode) => {
    if (envMode) {
      uni.setStorageSync(appConfig.storeEnvEnumKey, envMode) // 改变存储
    }
    return uni.getStorageSync(appConfig.storeEnvEnumKey)
  },
  
  // push 状态是否开启
  pushIsOpen: (pushFlag) => {
    if (pushFlag) {
      uni.setStorageSync('pushFlag', pushFlag) // 改变存储
    }
    return uni.getStorageSync('pushFlag')
  },
  // 网站信息
  siteInfos: (siteInfos) => {
    if (siteInfos) {
      uni.setStorageSync("siteInfos", siteInfos) // 改变存储
    }
  	return uni.getStorageSync("siteInfos")
  },

    // unipush2  cid
  uniPush2Cid: (uniPush2Cid) => {
        if (uniPush2Cid) {
            uni.setStorageSync("uniPush2Cid", uniPush2Cid) // 改变存储
        }
    return uni.getStorageSync("uniPush2Cid")
  },
  uploadImgSize: (uploadImgSize) => {
        if (uploadImgSize) {
            uni.setStorageSync("uploadImgSize", uploadImgSize) // 存储 上传 图片大小限制
        }
    return uni.getStorageSync("uploadImgSize")
  },
}

export default model
